#include <iostream>

class TextHolder {
public:
  TextHolder(std::string txt) : m_text(txt) {}
  const std::string &getText() const & { return m_text; }
  /*
  const std::string &getText() const & 的 const &
  限定符并不能完全阻止临时对象调用该函数，因为临时对象本质上是一个 const
  对象，符合 const & 的约束。
  如果您希望完全禁止临时对象调用某个成员函数，可以通过定义并删除右值引用版本的函数（&&
  版本）来实现。
  const std::string &getText() const && = delete;
  */
  std::string &&getString() { return std::move(m_text); }

private:
  std::string m_text;
};
int main() {
  {
    TextHolder textHolder{"Hello world"};
    std::cout << textHolder.getText() << std::endl;

    std::cout << TextHolder{"Hello world"}.getText() << std::endl;
    std::cout << std::move(textHolder.getText()) << std::endl;
  }
}